import org.junit.Test;

import java.io.*;

/**
 * @auther yangdong
 * @create 2020-04-26
 * 标准输入、输出流
 * 打印流
 * 数据流
 */
public class OtherStreamTest {

    /**
     * System.in和System.out分别代表了系统标准的输入和输出设备
     * 默认输入设备是：键盘，输出设备是：显示器
     *  System.in的类型是InputStream
     *  System.out的类型是PrintStream，其是OutputStream的子类
     * FilterOutputStream 的子类
     *  重定向：通过System类的setIn，setOut方法对默认设备进行改变。
     *  public static void setIn(InputStream in)
     *  public static void setOut(PrintStream out)
     *
     */
    public static void main(String[] args){
        // 把"标准"输入流(键盘输入)这个字节流包装成字符流,再包装成缓冲流
        InputStream is=System.in;
        InputStreamReader isr=new InputStreamReader(is);
        BufferedReader br=new BufferedReader(isr);
        try {
        while (true){
            System.out.println("请输入字符");

                String str=br.readLine();
                if("e".equalsIgnoreCase(str)||"exit".equalsIgnoreCase(str)){
                    System.out.println("退出程序");
                    break;
                }else{
                    System.out.println(str.toUpperCase());
                }
        }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (br!=null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 实现将基本数据类型的数据格式转化为字符串输出
     * 打印流：PrintStream和PrintWriter
     *  提供了一系列重载的print()和println()方法，用于多种数据类型的输出
     *  PrintStream和PrintWriter的输出不会抛出IOException异常
     *  PrintStream和PrintWriter有自动flush功能
     *  PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节。
     * 在需要写入字符而不是写入字节的情况下，应该使用 PrintWriter 类。
     *  System.out返回的是PrintStream的实例
     */
    @Test
    public void printStreamwriter(){
        PrintStream ps=null;
        try {
            FileOutputStream fis=new FileOutputStream("src/hello5.txt");
            BufferedOutputStream bos=new BufferedOutputStream(fis);
            ps=new PrintStream(bos);
            System.setOut(ps);
            for (int i = 0; i <256 ; i++) {
                System.out.print((char)i);
                if(i%50==0){
                    System.out.println();
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally{
            ps.close();
        }
    }

}
